package cn.com.cc.utils;

import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;

import com.lowagie.text.Chunk;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.rtf.RtfWriter2;

/**
 * yy 根据itext提供的java类库，构建word模板，并添加相应的内容，从而导出word报告；平台不相关
 * 需要引入iText-2.1.7.jar;iTextAsian.jar;iText-rtf-2.1.7.jar
 * 
 * @author cc
 */
public class WordOfTemplete {
	
	private Document document;
	
	private BaseFont bfChinese;
	
	public BaseFont getBfChinese() {
		return bfChinese;
	}

	public void setBfChinese(BaseFont bfChinese) {
		this.bfChinese = bfChinese;
	}

	public Document getDocument() {
		return document;
	}

	public void setDocument(Document document) {
		this.document = document;
	}

	public WordOfTemplete() {
		this.document = new Document(PageSize.A4);

	}

	/**
	 * @param filePath
	 *            建立一个书写器(Writer)与document对象关联，通过书写器(Writer)可以将文档写入到磁盘中
	 * @throws DocumentException
	 * @throws IOException
	 */
	public void openDocument(String filePath) throws DocumentException,	IOException {
		// 建立一个书写器(Writer)与document对象关联，通过书写器(Writer)可以将文档写入到磁盘中
		RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));
		this.document.open();
		this.document.setMargins(90f, 90f, 80f, 80f);
		// 设置中文字体
		this.bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H",	BaseFont.NOT_EMBEDDED);
	}

	public void addParagraph(String paragraphStr, int fontsize, int fontStyle, int elementAlign) throws DocumentException {
		Paragraph p = new Paragraph(paragraphStr, new Font(this.bfChinese, fontsize, fontStyle));
		p.setAlignment(elementAlign);
		p.setLeading(40f);
		document.add(p);
	}

	public void addParagraph(String paragraphStr, Font font, int elementAlign) throws DocumentException {
		Paragraph p = new Paragraph(paragraphStr, font);
		p.setAlignment(elementAlign);
		p.setLeading(40f);
		document.add(p);
	}
	
	
	public void setHeader(String s){
		HeaderFooter header = new HeaderFooter(new Phrase(new Chunk(s, new Font(Font.NORMAL, 10))), false);
		header.setAlignment(Rectangle.ALIGN_RIGHT);
		document.setHeader(header);
	}
	
	public void setFooter(String s){
		HeaderFooter footer = new HeaderFooter(new Phrase(new Chunk(s, new Font(Font.NORMAL, 10))), false);
		footer.setAlignment(Rectangle.ALIGN_RIGHT);
		document.setFooter(footer);
	}

	/**
	 * @param titleStr  		标题
	 * @param fontsize 			字体大小
	 * @param fontStyle 		字体样式
	 * @param elementAlign 		对齐方式
	 * @throws DocumentException
	 */
	public void insertTitle(String titleStr, int fontsize, int fontStyle, int elementAlign) throws DocumentException {
		Font titleFont = new Font(this.bfChinese, fontsize, fontStyle);
		Paragraph title = new Paragraph(titleStr);
		// 设置标题格式对齐方式
		title.setAlignment(elementAlign);
		title.setFont(titleFont);
		title.setSpacingBefore(5);
		this.document.add(title);
	}

	/**
	 * @param contextStr 			内容
	 * @param fontsize 				字体大小
	 * @param fontStyle  			字体样式
	 * @param elementAlign 			对齐方式
	 * @throws DocumentException
	 */
	public void insertContextNoIndent(String contextStr, int fontsize, int fontStyle, int elementAlign) throws DocumentException {
		// 正文字体风格
		Font contextFont = new Font(bfChinese, fontsize, fontStyle);
		Paragraph context = new Paragraph(contextStr);
		// 设置行距
		context.setLeading(30f);
		// 正文格式左对齐
		context.setAlignment(elementAlign);
		context.setFont(contextFont);
		// 离上一段落（标题）空的行数
		context.setSpacingBefore(5);
		document.add(context);
	}

	/**
	 * @param contextStr 			内容
	 * @param fontsize 				字体大小
	 * @param fontStyle 			字体样式
	 * @param elementAlign 			对齐方式
	 * @throws DocumentException
	 */
	public void insertContext(String contextStr, int fontsize, int fontStyle,int elementAlign) throws DocumentException {
		// 正文字体风格
		Font contextFont = new Font(bfChinese, fontsize, fontStyle);
		Paragraph context = new Paragraph(contextStr);
		// 设置行距
		context.setLeading(30f);
		// 正文格式左对齐
		context.setAlignment(elementAlign);
		context.setFont(contextFont);
		// 离上一段落（标题）空的行数
		context.setSpacingBefore(5);
		// 设置第一行空的列数
		context.setFirstLineIndent(20);
		document.add(context);
	}

	/**
	 * @param imgUrl 					图片路径
	 * @param imageAlign 				显示位置
	 * @param height 					显示高度
	 * @param weight 					显示宽度
	 * @param percent 					显示比例
	 * @param heightPercent 			显示高度比例
	 * @param weightPercent 			显示宽度比例
	 * @param rotation 					显示图片旋转角度
	 * @throws MalformedURLException
	 * @throws IOException
	 * @throws DocumentException
	 */
	public void insertImg(String imgUrl, int imageAlign, int height, int weight, int percent, int heightPercent, 
			int weightPercent,	int rotation) throws MalformedURLException, IOException, DocumentException {
		// 添加图片
		Image img = Image.getInstance(imgUrl);
		if (img == null)
			return;
		img.setAbsolutePosition(0, 0);
		img.setAlignment(imageAlign);
		img.scaleAbsolute(height, weight);
		img.scalePercent(percent);
		img.scalePercent(heightPercent, weightPercent);
		img.setRotation(rotation);

		document.add(img);
	}

	public void closeDocument() throws DocumentException {
		this.document.close();
	}
	
	/**
	 * 
	 * @param row								 行数
	 * @param col								列数
	 * @param tableWidth						表格宽度	,百分比
	 * @param widths							每列宽度,百分比
	 * @throws DocumentException
	 */
	public void createTable(int row, int col, float tableWidth, float[] widths) throws DocumentException{
		Table table = new Table(col, row);
		table.setBorderColor(Color.BLACK);
//		table.setAlignment(Table.ALIGN_LEFT);
		table.setWidth(tableWidth);
		table.setWidths(widths);
		table.setPadding(0);
		table.setSpacing(0);
		document.add(table);
	}

	public static void main(String[] args) throws DocumentException, IOException {
		WordOfTemplete wt = new WordOfTemplete();
		wt.openDocument("d:\\dome1.doc");
		wt.setFooter("中华人民共和国测试版");
		wt.setHeader("中华人民共和国测试版");
		wt.insertTitle("一、测试基本情况", 12, Font.BOLD, Element.ALIGN_CENTER);

		wt.insertContext("共识别出XXX个测试，XXX项测试行为，其中，违规类测试XX项，占测试总量的XX%，违约类测试XX项，占测试总量的XX%，侵权类测试XX项，占测试总量的XX%，怠于类测试XX项，占测试总量的XX%，不当类测试XX项，占测试总量的XX%。",
						12, Font.NORMAL, Element.ALIGN_LEFT);
		wt.insertContext("根据测试测评结果，各等级测试数量及所占百分比分别为：一级测试共XX项，占测试总量的XX%；二级测试共XX项，占测试总量的XX%；三级测试共XX项，占测试总量的XX%；四级测试共XX项，占测试总量的XX%；五级测试共XX项，占测试总量的XX%。\n\n",
						12, Font.NORMAL, Element.ALIGN_LEFT);

		wt.insertContext("测试定向分析结果如下：", 12, Font.NORMAL, Element.ALIGN_LEFT);

		wt.insertContext("① 部门角度测试分析", 12, Font.NORMAL, Element.ALIGN_LEFT);
		wt.createTable(3, 4, 60, new float[]{10,30,30,30});
		wt.insertImg("F:/line.png", Image.ALIGN_CENTER, 12, 35, 50, 50, 50, 30);
		wt.insertContext("② 主体角度测试分析", 12, Font.NORMAL, Element.ALIGN_LEFT);
		wt.insertImg("F:/line.png", Image.ALIGN_CENTER, 12, 35, 50, 60, 60, 30);
		wt.insertContext("③ 部门主体交叉角度测试分析", 12, Font.NORMAL, Element.ALIGN_LEFT);
		wt.insertImg("F:/line.png", Image.ALIGN_CENTER, 50, 75, 100, 100, 100,
				30);
		wt.insertContext("④业务活动角度测试分析", 12, Font.NORMAL, Element.ALIGN_LEFT);
		wt.insertImg("F:/line.png", Image.ALIGN_CENTER, 12, 35, 50, 80, 80, 30);

		wt.closeDocument();
	}
}
